package homework;

import java.util.Scanner;

/**
 * 1.编写一个方法，将一段文本中的各个单词的字母顺序翻转，
 * 例如："I like writing code best"，将变成"I ekil gnitirw edoc tseb"。
 * 2. String s="name=王五 age=18 classNum=1101”;
 * 将上面的字符串中包含的信息存放到 Student（里面有 name，age，
 * classNum 三个属性）的对象中:
 * 3. 字符串压缩:利用字符重复出现的次数，编写一种方法，实现基本的字符串
 * 压缩功能。比如,字符串“aabccdd”会变成“a2b1c2d2”。若“压缩”以后的字符
 * 串没有变短，则返回原先的字符串。你可以假设字符串中只包含大小写英文字
 * 母(a-z)
 * 示例 1：输入:aabcccccddddd
 * 输出:a2b1c5d5
 * 示例 2：输入：“abcdd” 输出:“abcdd” 解释:因为压缩后的字符串为:”a1b1c1d2”,长度大于原字符串
 * 4.写一个和 trim 功能相同的方法
 * 思路：
 * 1.定义两个变量，用来存储两个角标
 * 2.分别从头和尾遍历字符串，直到找到第一个不为空格的字符
 * 3.截取字符串
 */
public class Work10301001 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入要查看的题目序号：");
        System.out.println("1--将一段文本中的各个单词的字母顺序翻转");
        System.out.println("2--把字符串放到实体类");
        System.out.println("3--字母重复出现的次数打印");
        System.out.println("4--写一个trim相同的方法");
        int i = input.nextInt();
        if(i == 1){
            one();
        }else if(i == 2){
            two();
        }else if(i == 3){
            three();
        }else if(i == 4){
            four();
        }else{
            System.out.println("输入有误，服务暂停！");
        }





    }

    /**
     * 4.写一个和 trim 功能相同的方法
     *  * 思路：
     *  * 1.定义两个变量，用来存储两个角标
     *  * 2.分别从头和尾遍历字符串，直到找到第一个不为空格的字符
     *  * 3.截取字符串
     */
    private static void four() {
        System.out.println("trim是去掉首尾的空格");
        Scanner input = new Scanner(System.in);
        System.out.println("请输入开头和结尾有空格的字符串 例如: [  asdfadsf  ]");
        String next = input.next();
        System.out.println("输入的字符串是"+next);
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < next.toCharArray().length; i++){
            if(next.toCharArray()[i] != ' '){
                sb.append(next.toCharArray()[i]);
            }
        }
        System.out.println(sb.toString());

    }

    /**
     * 3. 字符串压缩:利用字符重复出现的次数，编写一种方法，实现基本的字符串
     *  * 压缩功能。比如,字符串“aabccdd”会变成“a2b1c2d2”。若“压缩”以后的字符
     *  * 串没有变短，则返回原先的字符串。你可以假设字符串中只包含大小写英文字
     *  * 母(a-z)
     *  * 示例 1：输入:aabcccccddddd
     *  * 输出:a2b1c5d5
     *  * 示例 2：输入：“abcdd” 输出:“abcdd” 解释:因为压缩后的字符串为:”a1b1c1d2”,长度大于原字符串
     */
    private static void three() {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一串有序相同的英文字母例如:aaaaabbbbbccccc");
        String next = input.next();
        System.out.println("输入的字母是"+next);
        //变量存放个数
        int a = 1;
        char[] chars = next.toCharArray();
        StringBuilder sb = new StringBuilder();
        for(int i =0; i < chars.length; i++){
            //如果 i+1等于数组的长度的话 也就是i是最后一个字母了
            if(i+1 != chars.length ){
                //如果 相邻2个相等
                if(String.valueOf(chars[i]).equals(String.valueOf(chars[i+1]))){
                    a++;
                    continue;
                }
                if(!String.valueOf(chars[i]).equals(String.valueOf(chars[i+1]))){
                    sb.append(chars[i]);
                    sb.append(a);
                    a = 1;
                }
            }else{
                sb.append(chars[i]);
                sb.append(a);
            }
        }

        //判断  原来字符串的长度是否等于现在的长度
        if(chars.length == sb.toString().toCharArray().length){
            System.out.println(next);
            System.out.println("因为压缩后的字符串"+sb.toString()+"的长度大于原字符串");
        }else{
            System.out.println(sb.toString());
        }
    }

    /**
     *  String s="name=王五 age=18 classNum=1101”;
     *  * 将上面的字符串中包含的信息存放到 Student（里面有 name，age，
     *  * classNum 三个属性）的对象中:
     */
    private static void two() {
        Student stu = new Student();
        String s = "name=王五 age=18 classNum=1101";
        String[] s1 = s.split(" ");
        for (int i = 0; i < s1.length; i++) {
            String[] split = s1[i].split("=");
            if (split[0].equals("name")) {
                stu.setName(split[1]);
            }
            if (split[0].equals("age")) {
                stu.setAge(Integer.parseInt(split[1]));
            }
            if (split[0].equals("classNum")) {
                stu.setClassNum(Integer.parseInt(split[1]));
            }
        }

        System.out.println("输出实体类存储"+stu.toString());
    }
    /**
     * 1.编写一个方法，将一段文本中的各个单词的字母顺序翻转，
     * 例如："I like writing code best"，将变成"I ekil gnitirw edoc tseb"。
     */
    private static void one() {

        //定义的 字母
        String a = "I like writing code best";
        //准备进行拼接
        StringBuilder sb = new StringBuilder();
        System.out.println("这一串字符是:"+a);

        char[] chars = a.toCharArray();
        //进行反转的数组
        String[] aa = new String[chars.length];


        for(int i = 0; i < chars.length; i++){
            if(chars[i] == ' ' ){
                for(int j = aa.length-1; j >= 0; j--){
                    if(aa[j] == null){
                        continue;
                    }
                    sb.append(aa[j]);
                }
                sb.append(" ");
                //遍历到空格 初始化一下
                aa = new String[chars.length];
            }
            //因为当 i == 23 的时候就是最后一次所以根本就无法进行遍历 存值
            aa[i] = String.valueOf(chars[i]);

            //上面是判断遇到空字符串的话就会就进行排列
            //如果是最后一个没有空字符串了以后
            if(i == chars.length-1){
                for(int j = i; j >= 0; j--){
                    if(aa[j] == null){
                        continue;
                    }
                    sb.append(aa[j]);
                }
            }

        }
        System.out.println("输出的结果是："+sb.toString());


    }
}
